"""
@author: ztt
@file: lianxi.py
@time: 2022/11/25 15:35
"""
#1、输入数字n，输出n天前的日期（time或者datatime模块）
# import datetime
# n = int(input("请输入一个数字："))
# today = datetime.datetime.now()
# result = today + datetime.timedelta(-n)
# print(f"{n}天前的日期为：{result}")

#2、输出指定文件夹下有哪些文件或文件夹（实现ls命令， os）
# import os
# file = input('请指定需要输出的文件夹：')
# if os.path.exists(file):
#     if os.path.isfile(file):
#         print(file)
#     else:
#         for i in os.listdir(file):
#             print(i)
# else:
#     print('文件不存在')

#3、列表去重，并且从小到大排序
# lst1 = {1,2,3,4,3,2,5}
# lst2 = []
# for i in lst1:
#     if i not in lst2:
#         lst2.append(i)
# lst2.sort()
# print(lst2)

#4、如何在一个函数内部修改全局变量
# a = 1
# def ztt (x):
#     print(x)
#     global a
#     a = 2
# ztt(a)
# print(a)

#5、如何跨模块共享全局变量
#   把全局变量都写在一个模块文件中，
#   使用的时候导入即可  --》 from xxx import xx

#6、python的基本数据类型有哪些？
#   整数、浮点数、复数、字符串、布尔、NoneType、列表、元组、字典、集合

#7、python中生成随机整数（1-10），随机小数（1-10），随机小数（0-1）的方法
# import random
# a = random.randint(1,10)
# print(a)
# b = random.uniform(1,10)
# print(b)
# c = random.random()
# print('%.2f'%c)

#8、python中哪些是可变数据类型，哪些是不可变数据类型
# 可变数据类型：列表list、字典dict、集合set
# 不可变数据类型：整型int、浮点型float、字符串型string和元组tuple
# 有序序列：列表，字符串，元组（有序功能特点:索引 遍历 切片）
# 无序序列：集合，字典

#9、a+=1与a=a+1有什么区别
# a+=1：
#     1、首先 += ：python底层调用__iadd__()方法
#     2、对于不可变数据类型：进行+=操作后，在栈中重新创建了新的对象。
#     3、对于可变数据类型：不会在栈中重新创建新的对象。
# a=a+1：
#     1、首先 + ：python底层调用__add__()方法
#     2、不可变数据类型：栈中重新创建新对象。
#     3、可变数据类型：在栈中重新创建新对象
# a = 2
# print(id(a))
# a += 1
# print(id(a))
# a = a + 2
# print(id(a))

#10、什么是pep8？说出5点它的标准
# 1.使用四个空格缩进，而不是制表符
# 2.如果可以，尽量注释独占一行
# 3.每一行代码控制在80字符以内
# 4.使用有意义的，英文单词或词组命名变量，绝对不要使用汉语拼音
# 5.所有import 尽量放在文件开头，在docstring下面，其他变量定义的上面

#11、给定一个字符串，找出字符串第一个重复的字符
str1 = input("请输入一个字符串：")
str2 = ''
for i in str1:
    if i in str2:
        print(f"第一个重复的字符为{i}")
        break
    str2 = str2 + i

#12、简述深拷贝与浅拷贝
#深浅拷贝
#只有在容器类型里面包含可变数据类型的时候，深浅拷贝才会造成不同的影响。
#浅拷贝之后的数据改变，可能会影响原来的数据。
#深拷贝之后的数据改变，不会影响原来的数据。
#因为浅拷贝只拷贝容器中第一层数据的地址
#而深拷贝会拷贝容器里的每一层的值。
#只对可变数据类型有效，不可变数据类型不受影响。
#只有使用深拷贝模块 -- deepcopy才是深拷贝，其余为浅拷贝。

#13、简述python内存机制
# 引用计数为主，分代回收和标记清除为辅的垃圾回收方式，进行内存回收管理
# 还引用了小整型缓冲池以及常用字符串驻留区的方式进行内存分配管理

#14、使用python实现冒泡排序，快速排序
#冒泡排序：
# def bub_sort(lst1):
#     for i in range(len(lst1)-1):
#         for j in range(len(lst1)-1-i):
#             if lst1[j]>lst1[j+1]:
#                 lst1[j],lst1[j+1]=lst1[j+1],lst1[j]
#     return lst1
# print(bub_sort(lst1 = [4,2,7,5,6,3,1,9,8]))

# #快速排序
# def get_mid(nums,low,high):
#     mid = nums[low]
#     i = low
#     j = high
#     while i<j:
#         while i<j and nums[j]>=mid:
#             j-=1
#         nums[i] = nums[j]
#         while i<j and nums[i]<mid:
#             i+=1
#         nums[j] = nums[i]
#         nums[i] = mid
#     # print(nums[i])
#     # print(i)
#     return i
# def quick_sort(arr,low,high):
#
#     if len(arr)<=1:
#         return arr
#     else:
#         if low<high:
#             pi = get_mid(nums, low, high)
#             quick_sort(arr,low,pi-1)
#             quick_sort(arr,pi+1,high)
#             return arr
# nums = [1,9,5,7,6,3,4,2,8]
# print(quick_sort(nums,0,len(nums)-1))


#15、验证一个字符串是否属于回文（从左到右，从右到左都是一样）
# str1 = input('请输入一个字符串：')
# str2 = str1[::-1]
# if str1==str2:
#     print('你输入的字符串属于回文')
# else:
#     print('你输入的字符串不属于回文')
